/**
 * 主应用程序JavaScript文件
 */

// ========== 全局变量和配置 ==========

// 全局配置
window.siteConfig = window.siteConfig || {
    siteName: '',
    currencySymbol: '¥',
    isLogin: false,
    userId: 0
};

// 分类菜单相关变量
let categoriesLoaded = false;
let categoriesData = null;

// ========== 用户状态管理 ==========

// 用户状态管理对象
window.userState = {
    // 用户状态
    isLogin: false,
    userId: 0,
    userInfo: null,

    // 初始化
    init() {
        // 从服务器获取最新用户信息
        this.fetchUserInfo();
    },

    // 从服务器获取用户信息
    fetchUserInfo() {
        $.ajax({
            url: '/user/getUserInfo',
            type: 'GET',
            dataType: 'json',
            cache: false,
            success: (response) => {
                if (response.code === 1 && response.data) {
                    // 更新用户信息
                    this.updateUserInfo(response.data);
                } else {
                    // 清除用户信息
                    this.clearUserInfo();
                }
            },
            error: () => {
                // 请求失败，清除用户信息
                this.clearUserInfo();
            }
        });
    },

    // 更新用户信息
    updateUserInfo(userInfo) {
        this.isLogin = !!userInfo;
        this.userInfo = userInfo;
        this.userId = userInfo ? userInfo.id : 0;

        // 只更新用户信息，不控制显示隐藏（由服务器端模板控制）
        // if (userInfo) {
        //     // 更新用户名显示（优先显示昵称）
        //     const displayName = userInfo.nickname || userInfo.username || '用户';
        //     $('#header-username').text(displayName);

        //     // 更新头像显示
        //     const avatar = userInfo.avatar;
        //     if (avatar) {
        //         $('#header-avatar').attr('src', avatar);
        //     }
        // }

        // 触发更新事件
        $(document).trigger('userStateUpdated', [this]);
    },

    // 清除用户信息
    clearUserInfo() {
        this.isLogin = false;
        this.userInfo = null;
        this.userId = 0;

        // 触发更新事件（不控制显示隐藏，由页面刷新处理）
        $(document).trigger('userStateUpdated', [this]);
    },

    // 强制刷新用户信息
    refresh() {
        this.fetchUserInfo();
    }
};

// ========== 分类菜单管理 ==========

// 绑定分类菜单事件
function bindCategoriesMenuEvents() {
    // 监听"全部栏目"的鼠标悬停事件
    $(document).on('mouseenter', '.group:has(#categories-dropdown)', function () {
        if (!categoriesLoaded) {
            loadCategoriesMenu();
        }
    });

    // 也可以监听具体的触发元素
    $(document).on('mouseenter', '[data-trigger="categories"]', function () {
        if (!categoriesLoaded) {
            loadCategoriesMenu();
        }
    });
}

// 加载分类菜单 - 修改为懒加载
function loadCategoriesMenu() {
    if (categoriesLoaded) {
        return; // 已经加载过，直接返回
    }

    // 显示加载状态
    const container = $('#categories-dropdown');
    if (container.length) {
        container.html('<div class="p-4 text-center"><span class="loading"></span> 加载中...</div>');
    }

    $.ajax({
        url: '/web/categories',
        type: 'GET',
        dataType: 'json',
        success: function (response) {
            if (response.code === 1 && response.data) {
                categoriesData = response.data;
                categoriesLoaded = true;
                renderCategoriesMenu(response.data);
            } else {
                // 加载失败时显示错误信息
                if (container.length) {
                    container.html('<div class="p-4 text-center text-gray-500">加载失败</div>');
                }
            }
        },
        error: function () {
            // 网络错误时显示错误信息
            if (container.length) {
                container.html('<div class="p-4 text-center text-gray-500">网络错误</div>');
            }
        }
    });
}

// 渲染分类菜单
function renderCategoriesMenu(categories) {
    const container = $('#categories-dropdown');
    if (!container.length) return;

    let html = '';
    categories.slice(0, 10).forEach(category => { // 最多显示10个分类
        // 父分类图标
        const parentIcon = category.pic ? `<img src="${category.pic}" alt="${category.name}" class="w-4 h-4 mr-2 rounded">` : '<i class="fas fa-folder mr-2 text-blue-500"></i>';

        html += `
                <div class="category-menu-item">
                    <a href="${category.url}" class="category-parent-link">
                        ${parentIcon}${category.name}
                    </a>
                    ${category.children && category.children.length > 0 ? `
                        <div class="category-children">
                            ${category.children.slice(0, 4).map(child => {
            // 子分类图标
            const childIcon = child.pic ? `<img src="${child.pic}" alt="${child.name}" class="w-3 h-3 mr-1 rounded">` : '<i class="fas fa-file-alt mr-1 text-gray-400 text-xs"></i>';
            return `<a href="${child.url}" class="category-child-link">${childIcon}${child.name}</a>`;
        }).join('')}
                            ${category.children.length > 4 ?
                    `<a href="${category.url}" class="category-child-link" style="color: #3b82f6; font-weight: 500;"><i class="fas fa-ellipsis-h mr-1"></i>查看更多 →</a>`
                    : ''
                }
                        </div>
                    ` : ''}
                </div>
            `;
    });

    container.html(html);
}

// 渲染移动端分类菜单
function renderMobileCategoriesMenu(categories) {
    const container = $('#mobile-categories');
    if (!container.length) return;

    let html = '';
    categories.forEach(category => {
        html += `<a href="${category.url}" class="block py-1 text-gray-500 hover:text-blue-600">${category.name}</a>`;

        // 添加子分类
        if (category.children && category.children.length > 0) {
            category.children.slice(0, 3).forEach(child => {
                html += `<a href="/category-${child.id}" class="block py-1 pl-4 text-sm text-gray-500 hover:text-blue-600">• ${child.name}</a>`;
            });
        }
    });

    container.html(html);
}

// 加载移动端分类菜单
function loadMobileCategories() {
    if (categoriesLoaded) {
        return; // 已经加载过，直接返回
    }

    // 显示加载状态
    const container = $('#mobile-categories');
    if (container.length) {
        container.html('<div class="p-2 text-center text-sm text-gray-500">加载中...</div>');
    }

    $.ajax({
        url: '/web/categories',
        type: 'GET',
        dataType: 'json',
        success: function (response) {
            if (response.code === 1 && response.data) {
                renderMobileCategoriesMenu(response.data);
                categoriesLoaded = true;
            } else {
                if (container.length) {
                    container.html('<div class="p-2 text-center text-sm text-gray-500">加载失败</div>');
                }
            }
        },
        error: function () {
            // 网络错误时显示错误信息
            if (container.length) {
                container.html('<div class="p-2 text-center text-sm text-gray-500">网络错误</div>');
            }
        }
    });
}

// ========== 搜索功能 ==========

// 搜索功能
function doSearch() {
    const keyword = $('#search-input').val().trim();
    if (keyword) {
        window.location.href = '/search-' + encodeURIComponent(keyword);
    }
}

// ========== 用户菜单控制 ==========

// 用户菜单控制
function toggleUserMenu() {
    const $dropdown = $('#user-dropdown');
    const $arrow = $('#user-menu-arrow');

    if ($dropdown.hasClass('opacity-0')) {
        // 显示菜单
        $dropdown.removeClass('opacity-0 invisible').addClass('opacity-100 visible');
        $arrow.css('transform', 'rotate(180deg)');
    } else {
        // 隐藏菜单
        $dropdown.addClass('opacity-0 invisible').removeClass('opacity-100 visible');
        $arrow.css('transform', 'rotate(0deg)');
    }
}

// ========== 登录登出功能 ==========

// 退出登录
function logout() {
    if (typeof showConfirm === 'function') {
        showConfirm('确定要退出登录吗？', function () {
            doLogout();
        });
    } else {
        if (confirm('确定要退出登录吗？')) {
            doLogout();
        }
    }
}

// 执行退出登录
function doLogout() {
    // 使用AJAX调用退出登录接口
    $.ajax({
        url: '/user/logout',
        type: 'GET',
        success: function () {
            // 退出成功后直接刷新页面，让服务器端重新渲染正确的登录状态
            window.location.reload();
        },
        error: function () {
            // 即使出错也刷新页面
            window.location.reload();
        }
    });
}

// ========== 工具函数 ==========

// 通用的加载提示
function showLoading(element) {
    element.innerHTML = '<span class="loading"></span> 加载中...';
    element.disabled = true;
}

function hideLoading(element, text) {
    element.innerHTML = text;
    element.disabled = false;
}

// ========== 事件监听 ==========

// 监听用户状态更新事件
$(document).on('userStateUpdated', function (_, userState) {
    // 只更新用户相关信息，不控制登录状态显示（由服务器端模板控制）
    if (userState.isLogin) {
        $('.user-info').show();
    } else {
        $('.user-info').hide();
    }
});

// ========== 页面初始化 ==========

// 初始化
$(function () {
    // 初始化懒加载
    $("img.lazy-image").lazyload();

    // 初始化用户状态管理
    if (window.userState) {
        window.userState.init();
    }

    // 绑定分类菜单悬停事件
    bindCategoriesMenuEvents();
});

// 页面DOM加载完成后的初始化
$(document).ready(function () {
    // 回车搜索
    $('#search-input').on('keypress', function (e) {
        if (e.key === 'Enter') {
            doSearch();
        }
    });

    // 点击外部关闭用户菜单
    $(document).on('click', function (event) {
        const $userMenu = $('#user-menu');
        const $dropdown = $('#user-dropdown');

        if ($userMenu.length && $dropdown.length && !$userMenu[0].contains(event.target)) {
            $dropdown.addClass('opacity-0 invisible').removeClass('opacity-100 visible');
            $('#user-menu-arrow').css('transform', 'rotate(0deg)');
        }
    });
});

// ========== 移动端菜单功能 ==========

// 切换移动端菜单
function toggleMobileMenu() {
    const mobileMenu = document.getElementById('mobile-menu');
    if (mobileMenu) {
        mobileMenu.classList.toggle('hidden');
    }
}

// 切换移动端搜索
function toggleMobileSearch() {
    const mobileSearch = document.getElementById('mobile-search');
    if (mobileSearch) {
        mobileSearch.classList.toggle('hidden');
        if (!mobileSearch.classList.contains('hidden')) {
            // 聚焦到搜索框
            const searchInput = document.getElementById('mobile-search-input');
            if (searchInput) {
                setTimeout(() => searchInput.focus(), 100);
            }
        }
    }
}

// 切换移动端分类菜单
function toggleMobileCategories() {
    const mobileCategories = document.getElementById('mobile-categories');
    const arrow = document.getElementById('mobile-categories-arrow');

    if (mobileCategories && arrow) {
        mobileCategories.classList.toggle('hidden');
        arrow.classList.toggle('rotate-180');

        // 如果分类还没有加载，则加载分类
        if (!categoriesLoaded && !mobileCategories.classList.contains('hidden')) {
            loadMobileCategories();
        }
    }
}

// 移动端搜索
function doMobileSearch() {
    const searchInput = document.getElementById('mobile-search-input');
    if (searchInput && searchInput.value.trim()) {
        window.location.href = '/search?q=' + encodeURIComponent(searchInput.value.trim());
    }
}

// 点击外部关闭移动端菜单
document.addEventListener('click', function (event) {
    const mobileMenu = document.getElementById('mobile-menu');
    const mobileSearch = document.getElementById('mobile-search');
    const menuButton = event.target.closest('[onclick="toggleMobileMenu()"]');
    const searchButton = event.target.closest('[onclick="toggleMobileSearch()"]');

    // 关闭移动端菜单
    if (mobileMenu && !mobileMenu.classList.contains('hidden') && !menuButton && !mobileMenu.contains(event.target)) {
        mobileMenu.classList.add('hidden');
    }

    // 关闭移动端搜索
    if (mobileSearch && !mobileSearch.classList.contains('hidden') && !searchButton && !mobileSearch.contains(event.target)) {
        mobileSearch.classList.add('hidden');
    }
});
